// physical-html
//
// Copyright (c)Daigo Tanaka
// 
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
// 
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
// 
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.

physHtml.particleFactory = function(physicalHtml)
{
this.physicalHtml = physicalHtml;
this.gravity = $V[(0.0, 9.8)];
this.offset = $V([-0.5, -0.5]);
this.rotationOffset = $V([0, 0]);

this.createOrGetObject = function(objectID)
{
  var object = this.physicalHtml.physicalObjects.getObjectByID(objectID);
  if (object == null){
    var element = document.getElementById(objectID);
    if (element != null){
      object = new physHtml.particle(objectID);
      object.position = $V([parseFloat(element.style.left), parseFloat(element.style.top)]);
      object.width = parseFloat(element.style.width);
      object.height = parseFloat(element.style.height);
      object.radius = object.height;
      object.gravity = this.gravity.dup();
      object.offset = this.offset.dup();
      object.rotationOffset = this.rotationOffset.dup();
      this.physicalHtml.physicalObjects.addObject(object);

      var htmlObject = new physHtml.htmlObject(element, object);
      physicalHtml.htmlObjects.addObject(htmlObject);
    }
  }

  return object;
}

this.createOrGetObjects = function(objectIDs)
{
  var objects = new Array();
  for (var i = 0; i < objectIDs.length; i++){
    var object = this.createOrGetObject(objectIDs[i])
    if (object != null){
      objects.push(object);
    }
  }
  return objects;
}

}

